package com.company.ljh.medium;

/**
 * @description:
 * 714
 * 给定一个整数数组 prices，其中 prices[i]表示第 i 天的股票价格 ；整数 fee 代表了交易股票的手续费用。
 *
 * 你可以无限次地完成交易，但是你每笔交易都需要付手续费。如果你已经购买了一个股票，在卖出它之前你就不能再继续购买股票了。
 *
 * 返回获得利润的最大值。
 *
 * 注意：这里的一笔交易指买入持有并卖出股票的整个过程，每笔交易你只需要为支付一次手续费。
 * @projectName:leet_code
 * @see:com.company.ljh.medium
 * @author:ljh
 * @createTime:2024/2/18 17:02
 * @version:1.0
 */
public class 买卖股票的最佳时机含手续费 {
    public static void main(String[] args) {
        int num[]=new int[]{2,1,4,4,2,3,2,5,1,2};
        int i = maxProfit(num, 1);
        System.out.println(i);
    }
    public static int maxProfit(int[] prices, int fee) {
        int total = 0;
        int buy = prices[0];
        int sell = prices[0];
        for(int i =1;i<prices.length;i++){
            //如果上次max-min-2赚的钱(必须>0)足以让此次买股票的价格比上一次低，则可以购买
            if(Math.max(0,sell - buy - fee) > prices[i] - buy){
                //卖掉股票
                total +=  Math.max(0,sell - buy - fee);
                buy = prices[i];
                sell = 0;
            }
            sell = Math.max(sell,prices[i]);

        }
        return total +  Math.max(0,sell - buy - fee) ;
    }
}
